/*
 * 文件名：PushService.java
 * 版权：
 * 描述：TODO
 * 修改人：zuo liubo
 * 修改时间：2013-3-26 下午2:40:06
 */
package com.scpii.api.service.push;

import java.util.List;

import com.scpii.api.domain.push.Message;
import com.scpii.api.domain.push.UserMessageDevices;
import com.scpii.api.domain.push.UserMessages;

/**
 * @description TODO
 * @author zuo liubo
 * @date 2013-3-26
 */
public interface PushService {

	/**SDFsdf
	 * android用户拉取消息
	 * @param userId	用户ID
	 * @param deviceId	设备ID
	 * @param appId	应用ID
	 * @return	返回所有的消息
	 */
	List<UserMessageDevices> getMessageByUser(Long userId, long deviceId, Long appId);
	
	/**
	 * IOS拉取消息 
	 * @param messageId	消息ID
	 * @param type	类型，0表示只拉取本身一条消息，1表示拉取该用户在该设备上的所有未拉取的消息
	 * @return
	 */
	List<UserMessageDevices> selectUserMessageDevicesById(Long messageId,int type);
	
	/**
	 * 根据对象来删除数据
	 * @param userMessages
	 * @return
	 */
	boolean deleteUserMessageByObject(UserMessages userMessages);
	
	/**
	 * 根据用户ID来获取该用户消息中心的所有消息
	 * @param userId
	 * @return
	 */
	List<UserMessages> getUserMessageByUserId(Long userId);

	/**
	 * 向消息队列中插入一条消息<br>
	 * 向userId 发送一条 message信息
	 * @param message
	 * @return
	 */
	boolean insertMessage(Message message,String userId,String userName);
	
	
	/**
	 * 更新消息状态
	 * @param objects
	 */
	void updateMessageStatus(Object...objects);
	
	/**
	 * 更新消息状态<br>
	 * 将消息推送给APNS服务器后，更新消息为HAS_PUSH
	 * @param umd 包含应用ID和消息ID
	 * @param iosTokens	这次需要推送的设备号
	 */
	void messageStatusToHasPush(UserMessageDevices umd,List<String> iosTokens);
	
	/**
	 * 用户读取消息
	 * @param userMessageId	用户消息唯一ID
	 * @param userId	用户ID
	 * @return	返回未读数量
	 */
	int updateMessageToRead(Long userMessageId,Long userId);
	
	int updateMessageStatusByIosToken(UserMessageDevices umd, List<String> iosTokens);
	
	int selectNotReadCountByUserId(Long userId);
	
	int updateStatus4Test(Long userMessageDeviceId,Integer messageStatus);
}
